package cn.org.eshow.service.impl;

import cn.org.eshow.bean.query.CouponQuery;
import cn.org.eshow.bean.query.UserCouponQuery;
import cn.org.eshow.common.page.Page;
import cn.org.eshow.dao.UserCouponDao;
import cn.org.eshow.model.Coupon;
import cn.org.eshow.model.ProductOrder;
import cn.org.eshow.model.User;
import cn.org.eshow.model.UserCoupon;
import cn.org.eshow.service.CouponManager;
import cn.org.eshow.service.ProductOrderManager;
import cn.org.eshow.service.UserCouponManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.jws.WebService;
import java.util.Date;
import java.util.List;

@WebService(serviceName = "UserCouponService", endpointInterface = "cn.org.eshow.service.UserCouponManager")
@Service
public class UserCouponManagerImpl extends GenericManagerImpl<UserCoupon, Integer> implements UserCouponManager {

    @Autowired
    UserCouponDao userCouponDao;
    @Autowired
    CouponManager couponManager;
    @Autowired
    ProductOrderManager productOrderManager;

    public UserCouponManagerImpl() {
    }

    @Autowired
    public UserCouponManagerImpl(UserCouponDao userCouponDao) {
        super(userCouponDao);
        this.userCouponDao = userCouponDao;
    }

    @Override
    public List<UserCoupon> list(UserCouponQuery query) {
        return userCouponDao.list(query);
    }

    @Override
    public Page<UserCoupon> search(UserCouponQuery query) {
        return userCouponDao.search(query);
    }

    @Override
    public UserCoupon check(UserCouponQuery query) {
        List<UserCoupon> list = userCouponDao.list(query);
        if (!list.isEmpty()) {
            return list.get(0);
        }
        return null;
    }

    @Override
    public UserCoupon save(User user, Coupon coupon) {
        UserCoupon userCoupon = new UserCoupon();
        userCoupon.setUser(user);
        userCoupon.setCoupon(coupon);
        return userCouponDao.save(userCoupon);
    }

    @Override
    public void useCoupon(UserCoupon userCoupon) {
        userCoupon.setUpdateTime(new Date());
        userCoupon.setState(1);
        userCoupon=userCouponDao.save(userCoupon);
        Coupon coupon=userCoupon.getCoupon();
        coupon.setUsed(coupon.getUsed()+1);
        couponManager.save(coupon);
    }

    @Override
    public void turnBackUserCoupon(UserCoupon userCoupon) {
        if(userCoupon==null){
            return;
        }
        userCoupon.setUpdateTime(new Date());
        Coupon coupon= userCoupon.getCoupon();
        if(coupon.getState()==2){//只有模版还在使用中的优惠券,才能还原
            userCoupon.setState(0);
            userCoupon=userCouponDao.save(userCoupon);

            coupon.setUsed(coupon.getUsed()-1);
            couponManager.save(coupon);
        }
    }

    @Override
    public void initUserCoupon(User user) {
        List<Coupon> couponList=couponManager.list(new CouponQuery(true,"0,2",1));// 至少库存1张的（0未开始，-1已过期，2使用中）
        for(Coupon coupon: couponList){
            UserCoupon userCoupon=new UserCoupon();
            userCoupon.setUser(user);
            userCoupon.setCoupon(coupon);
            userCoupon.setState(0);
            userCouponDao.save(userCoupon);

            //coupon库存量变化
            coupon.setStock(coupon.getStock()-1);
            couponManager.save(coupon);

        }
    }

}